package day0415;


import com.sun.org.apache.regexp.internal.RE;

public class LeetCode1052 {
    /**
     * 、1052. 爱生气的书店老板
     * 中等
     * 提示
     * 有一个书店老板，他的书店开了 n 分钟。每分钟都有一些顾客进入这家商店。给定一个长度为 n 的整数数组 customers ，其中 customers[i] 是在第 i 分钟开始时进入商店的顾客数量，所有这些顾客在第 i 分钟结束后离开。
     * <p>
     * 在某些时候，书店老板会生气。 如果书店老板在第 i 分钟生气，那么 grumpy[i] = 1，否则 grumpy[i] = 0。
     * <p>
     * 当书店老板生气时，那一分钟的顾客就会不满意，若老板不生气则顾客是满意的。
     * <p>
     * 书店老板知道一个秘密技巧，能抑制自己的情绪，可以让自己连续 minutes 分钟不生气，但却只能使用一次。
     * <p>
     * 请你返回 这一天营业下来，最多有多少客户能够感到满意 。
     * <p>
     * <p>
     * 示例 1：
     * <p>
     * 输入：customers = [1,0,1,2,1,1,7,5], grumpy = [0,1,0,1,0,1,0,1], minutes = 3
     * 输出：16
     * 解释：书店老板在最后 3 分钟保持冷静。
     * 感到满意的最大客户数量 = 1 + 1 + 1 + 1 + 7 + 5 = 16.
     * 示例 2：
     * <p>
     * 输入：customers = [1], grumpy = [0], minutes = 1
     * 输出：1
     */
    public static void main(String[] args) {

    }

    public int maxSatisfied(int[] customers, int[] grumpy, int minutes) {
//        // 方法一：
//        int maxNeedChange = 0;
//        for (int i = 0; i < customers.length - minutes + 1; i++) {
//            int sum = 0;
//            for (int j = 0; j < minutes; j++) {
//                sum += customers[i + j] * grumpy[i + j];
//            }
//            maxNeedChange = Math.max(sum, maxNeedChange);
//        }
//        int total = maxNeedChange;
//        for (int i = 0; i < customers.length; i++) {
//            total += customers[i] * (grumpy[i] == 0 ? 1 : 0);
//        }
//        return total;
        // 方法二：滑动窗口
        int sum = 0;
        for (int i = 0; i < minutes; i++) {
            sum += customers[i] * grumpy[i];
        }
        int needChangeMax = sum;
        for (int i = minutes; i < customers.length; i++) {
            sum = sum + customers[i] * grumpy[i] - customers[i - minutes] * grumpy[i - minutes];
            needChangeMax = Math.max(needChangeMax, sum);
        }
        int total = needChangeMax;
        for (int i = 0; i < customers.length; i++) {
            total += customers[i] * (grumpy[i] == 0 ? 1 : 0);
        }
        return total;
    }

}
